package entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
import valueObject.AcompananteVO;
import valueObject.UsuarioRegistradoVO;

@Entity
@NamedQueries({
    @NamedQuery(name="buscarInformacionEnFormulario",query="SELECT u FROM UsuarioRegistrado u WHERE u.documento = :documento AND u.formulario.id = :formulario")
})
public class UsuarioRegistrado implements Serializable, Entidad<UsuarioRegistradoVO> {
    
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private int id;
    private String apellido;
    private String nombre;
    private String tipoDeDocumento;
    private String documento;
    private String genero;
    private String dependencia;
    private String correo;
    private String telefono;
    private String celular;
    private boolean estaAceptado;
    private boolean estaConfirmado;
    
    @ManyToOne(optional=false)
    private Formulario formulario;
       
    @ManyToOne(optional=false)
    private TipoDeContratacion tipoDeContratacion;
    
    
    @OneToMany(cascade= CascadeType.PERSIST)
    private List<Acompanante> acompanantes;
    
    @OneToOne
    private PuntoDeEncuentro puntoDeEncuentro;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getTipoDeDocumento() {
        return tipoDeDocumento;
    }

    public void setTipoDeDocumento(String tipoDeDocumento) {
        this.tipoDeDocumento = tipoDeDocumento;
    }

    public String getDocumento() {
        return documento;
    }

    public void setDocumento(String documento) {
        this.documento = documento;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getDependencia() {
        return dependencia;
    }

    public void setDependencia(String dependencia) {
        this.dependencia = dependencia;
    }

    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public boolean isEstaAceptado() {
        return estaAceptado;
    }

    public void setEstaAceptado(boolean estaAceptado) {
        this.estaAceptado = estaAceptado;
    }

    public boolean isEstaConfirmado() {
        return estaConfirmado;
    }

    public void setEstaConfirmado(boolean estaConfirmado) {
        this.estaConfirmado = estaConfirmado;
    }

    public Formulario getFormulario() {
        return formulario;
    }

    public void setFormulario(Formulario formulario) {
        this.formulario = formulario;
    }

    public TipoDeContratacion getTipoDeContratacion() {
        return tipoDeContratacion;
    }

    public void setTipoDeContratacion(TipoDeContratacion tipoDeContratacion) {
        this.tipoDeContratacion = tipoDeContratacion;
    }
    
    public List<Acompanante> getAcompanantes() {
        return acompanantes;
    }

    public void setAcompanantes(List<Acompanante> acompanantes) {
        this.acompanantes = acompanantes;
    }
    
    public PuntoDeEncuentro getPuntoDeEncuentro() {
        return puntoDeEncuentro;
    }

    public void setPuntoDeEncuentro(PuntoDeEncuentro puntoDeEncuentro) {
        this.puntoDeEncuentro = puntoDeEncuentro;
    }
    
    @Override
    public UsuarioRegistradoVO toValueObject() {
        UsuarioRegistradoVO usuarioRegistradoVO = new UsuarioRegistradoVO();
        usuarioRegistradoVO.setApellido(apellido);
        usuarioRegistradoVO.setCelular(celular);
        usuarioRegistradoVO.setCorreo(correo);
        usuarioRegistradoVO.setDependencia(dependencia);
        usuarioRegistradoVO.setDocumento(documento);
        usuarioRegistradoVO.setEstaAceptado(estaAceptado);
        usuarioRegistradoVO.setEstaConfirmado(estaConfirmado);
        usuarioRegistradoVO.setTelefono(telefono);
        usuarioRegistradoVO.setFormulario(formulario.toValueObject());
        usuarioRegistradoVO.setGenero(genero);
        usuarioRegistradoVO.setId(id);
        usuarioRegistradoVO.setNombre(nombre);
        usuarioRegistradoVO.setTipoDeContratacion(tipoDeContratacion.toValueObject());
        usuarioRegistradoVO.setTipoDeDocumento(tipoDeDocumento);
        
        if (acompanantes != null) {
            ArrayList<AcompananteVO> acompanantesVO = new ArrayList<AcompananteVO>();
            for (Acompanante acompanante : acompanantes) {
                acompanantesVO.add(acompanante.toValueObject());
            }
            usuarioRegistradoVO.setAcompanantes(acompanantesVO);
        } else {
            usuarioRegistradoVO.setAcompanantes(new ArrayList<AcompananteVO>());
        }
        
        usuarioRegistradoVO.setPuntoDeEncuentro(puntoDeEncuentro.toValueObject());
        
        return usuarioRegistradoVO;
    } 
}
